package com.cncytech.uiautomator_demo.policyinterface.impl;

public interface TerminalBasicFunctionManagement {

    /**
     * @param mode 0：禁用通话功能；
     *             1：允许通话功能。
     * @return 成功返回 true；失败返回 false。
     */
    boolean setVoicePolicies(int mode);

    /**
     * @return 返回值为当前功能模式，参见 setVoicePolicies 方法的参数 mode。
     */
    int getVoicePolicies();

    /**
     * @param mode   0：禁用短信功能；
     *               1：允许短信功能。
     * @param regExp
     * @return
     */
    boolean setSmsPolicies(int mode, String regExp);

    /**
     * @return 返回值为当前功能模式，参见 setSmsPolicies 方法的参数 mode。
     */
    int getSmsPolicies();

    /**
     * @param mode 0：禁用截屏/录屏功能；
     *             1：允许截屏/录屏功能。
     * @return
     */
    boolean setCaptureScreenPolicies(int mode);

    /**
     * @return 返回值为当前功能模式，参见 setCaptureScreenPolicies 方法的参数 mode。
     */
    int getCaptureScreenPolicies();


    /**
     * @param mode        0：禁止终端使用网络共享功能；
     *                    1：允许终端启用网络共享功能，但只允许列表中指定 MAC 地址的设备接入。
     *                    macInfoList：仅当 mode=1 时有效，数组中每一项为一个 JSON 格式字符串，格式如下：
     *                    "00-11-22-33-44-55"。
     * @param macInfoList
     * @return
     */
    boolean setWlanApPolicies(int mode, String[] macInfoList);

    /**
     * 返回值为当前网络共享管控策略状态
     * string[0]：功能模式，参见 setWlanApPolicies 方法的 mode 参数。
     * string[1]至 string[n-1]：仅当 mode=1 时返回允许接入的特定 MAC 地址信息，参见
     * setWlanApPolicies 方法的 macInfoList 参数
     *
     * @return
     */
    String[] getWlanApPolicies();

    /**
     * @param mode 0：不允许用户增加、删除、修改、查看 APN 配置以及选择 APN；
     *             1：仅允许用户查看 APN 配置，但不允许其他操作；
     *             2：允许用户增加、删除、修改、查看 APN 信息，及选择使用的 APN。
     * @return
     */
    boolean setUserApnMgrPolicies(int mode);

    /**
     * @return 返回值为当前功能模式，参见 getUserApnMgrPolicies 方法的参数 mode
     */
    int getUserApnMgrPolicies();

    /**
     * @param mode 0：要求设置字母数字混合密码，并对密码合规性进行检查；
     *             1：要求设置简单数字密码，并对密码合规性进行检查；
     *             2：要求启用生物识别技术；
     *             3：允许用户自行设定密码策略，不进行统一管控。
     * @return
     */
    boolean setUserPasswordPolicies(int mode);

    /**
     * @return 返回值为当前功能模式，参见 setUserPasswordPolicies 方法的参数 mode。
     */
    int getUserPasswordPolicies();

    /**
     * @param mode 0：不允许用户或应用修改本机时间及时间来源，并强制同步移动网络时间；
     *             1：允许用户或应用修改本机时间，以及设定时间来源。
     * @return
     */
    boolean setUserTimeMgrPolicies(int mode);

    int getUserTimeMgrPolicies();

    /**
     * @param mode 0：不允许用户在设置菜单中对终端进行恢复出厂设置的操作；
     *             1：允许用户在设置菜单中对终端进行恢复出厂设置的操作。
     * @return
     */
    boolean setFactoryResetPolicies(int mode);

    int getFactoryResetPolicies();

    /**
     * @param mode 0：不允许用户在设置菜单中对终端进行恢复出厂设置的操作；
     *             1：允许用户在设置菜单中对终端进行恢复出厂设置的操作。
     * @return
     */
    boolean setDevelopmentModePolicies(int mode);

    int getDevelopmentModePolicies();

    /**
     * @param mode 0：不允许用户在设置菜单中对终端操作系统进行升级的操作；
     *             1：允许用户在设置菜单中对终端操作系统进行升级的操作
     * @return
     */
    boolean setSystemUpdatePolicies(int mode);

    int getSystemUpdatePolicies();

    /**
     * @param mode    0：不允许任何终端应用调用应用交互式安装/卸载接口；
     *                1：仅允许接口授权列表指定的终端应用调用应用交互式安装/卸载接口，接口授权列表包含
     *                应用包名和应用签名证书指纹值；
     *                2：允许所有应用调用应用交互式安装/卸载接口。
     * @param appList appList：仅当 mode=1 时有效，数组中每一项为一个 JSON 格式字符串，格式如下：
     *                * {"AppPackageName":"应用包名","CertificateHash":"证书 Sha1 哈希值 16 进制字符串"}
     * @return
     */
    boolean setInstallUninstallPolicies(int mode, String[] appList);

    /**
     * @return 返回值为当前交互式安装/卸载接口管控状态
     * string[0]：功能模式，参见 setInstallUninstallPolicies 方法的 mode 参数。
     * string[1]至 string[n-1]：仅当 mode=1 时返回允许交互式安装/卸载的特定 APP 信息，参见
     * setInstallUninstallPolicies 方法的 appList 参数。
     */
    String[] getInstallUninstallPolicies();

    /**
     * @param mode    0：不允许所有应用调用应用静默安装/卸载接口；
     *                1：仅允许接口授权列表内的终端应用调用应用静默安装/卸载接口，接口授权列表包含应用
     *                包名和应用签名证书指纹值；
     *                2：允许所有应用调用应用静默安装/卸载接口。
     * @param appList 仅当 mode=0 时有效，数组中每一项为一个 JSON 格式字符串，格式如下：
     *                {"AppPackageName":"应用包名","CertificateHash":"证书 Sha1 哈希值 16 进制字符串"}。
     *                成功返回 true；失败返回 false。
     */
    boolean setSilentInstallUninstallPolicies(int mode, String[] appList);

    /**
     * @return 返回值为当前静默安装/卸载接口管控状态
     * string[0]：功能模式，参见 setSilentInstallUninstallPolicies 方法的 mode 参数。
     * string[1]至 string[n-1]：仅当 mode=1 时返回允许静默安装/卸载的特定 APP 信息，参见
     * setSilentInstallUninstallPolicies 方法的 appList 参数。
     */
    String[] getSilentInstallUninstallPolicies();


    /**
     * @param mode 0：允许使用 ADB 方式安装/卸载终端应用；
     *             1：不允许使用 ADB 方式安装/卸载终端应用
     * @return
     */
    boolean setAdbInstallUninstallPolicies(int mode);

    int getAdbInstallUninstallPolicies();
}
